/**
 * 队列接口定义
 * 队列应该实现以下方法:
 * - addTask: 添加任务到队列
 * - isEmpty: 检查队列是否为空
 * - size: 获取队列大小
 * - start: 开始执行队列中的任务
 * - lock: 锁定队列
 * - then: 添加队列执行完成后的回调
 * 
 * @author wurenlong
 */
export class QueueInterface {
  /**
   * 添加任务到队列
   * @param {Function} task 任务函数
   * @param {Object} params 任务参数
   * @param {Object} hooks 钩子函数
   * @returns {Promise} Promise对象
   */
  addTask(task, params, hooks) {
    throw new Error('队列接口的addTask方法必须被实现');
  }
  
  /**
   * 检查队列是否为空
   * @returns {boolean} 队列是否为空
   */
  isEmpty() {
    throw new Error('队列接口的isEmpty方法必须被实现');
  }
  
  /**
   * 获取队列大小
   * @returns {number} 队列大小
   */
  size() {
    throw new Error('队列接口的size方法必须被实现');
  }
  
  /**
   * 开始执行队列
   */
  start() {
    throw new Error('队列接口的start方法必须被实现');
  }
  
  /**
   * 锁定队列
   */
  lock() {
    throw new Error('队列接口的lock方法必须被实现');
  }
  
  /**
   * 添加队列执行完成后的回调
   * @param {Function} callback 回调函数
   */
  then(callback) {
    throw new Error('队列接口的then方法必须被实现');
  }
}

/**
 * 创建默认队列
 * 这个方法会返回默认的队列实现
 * @returns {QueueInterface} 队列接口的实现
 */
export async function createDefaultQueue() {
  // 动态导入默认队列实现
  try {
    const QueueModule = await import('./queue');
    const Queue = QueueModule.default;
    return new Queue();
  } catch (error) {
    console.error('[QueueInterface] 创建默认队列失败:', error);
    throw error;
  }
}

export default {
  QueueInterface,
  createDefaultQueue
}; 